package com.hmall.trade.listener;

import com.hmall.trade.service.IOrderService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.ExchangeTypes;
import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

// 使用 Lombok 注解@Slf4j 生成日志对象
// 将 PayStatusListener 类声明为 Spring 框架中的组件，以便自动检测
@Slf4j
@Component
public class PayStatusListener {
    // 自动注入 IOrderService 接口的实现类实例
    @Autowired
    private IOrderService orderService;

    /**
     * 监听队列中的订单id
     * 该方法使用 @RabbitListener 注解来监听特定的 RabbitMQ 队列和交换机
     * 当匹配的路由键（pay.success）出现时，表示订单支付成功，执行相应操作
     *
     * @param orderId 订单ID，由消息队列传递
     */
    @RabbitListener(bindings = @QueueBinding(
            value = @Queue(value = "mark.order.pay.queue", durable = "true"),
            exchange = @Exchange(value = "pay.topic", type = ExchangeTypes.TOPIC),
            key = {"pay.success"}
    ))
    public void listenPayStatus(Long orderId) {
        // 调用订单服务，将订单状态标记为支付成功
        orderService.markOrderPaySuccess(orderId);
        // 记录支付成功的日志信息
        log.error("pay.topic订单支付成功pay.success,订单id:{}", orderId);
    }
}
